package com.dao;

import com.entity.WalletRecord;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**  */
public interface WalletDao {
  /**
   * 更新用户的收款码
   *
   * @param userId 用户编号
   * @param qrCodeImageURL 新的收款码url
   * @return 更新成功返回1，失败返回0
   */
  int updateQrcode(@Param("userId") String userId, @Param("qrCodeImageURL") String qrCodeImageURL);

  /**
   * 获取用户的收款码
   *
   * @param userId 用户编号
   * @return 用户收款码url
   */
  String selectQrCode(@Param("userId") String userId);

  /**
   * 更新用户的账户余额
   *
   * @param userId 用户编号
   * @param restSub 余额减少值
   * @param withdrawingAdd 提现中金额增加值
   * @return 更新成功返回1，失败返回0
   */
  int updateCoinCount(
      @Param("userId") String userId,
      @Param("restSub") float restSub,
      @Param("withdrawingAdd") float withdrawingAdd);

  /**
   * 添加一条提现记录
   *
   * @param userId 用户编号
   * @param count 提现数量
   * @return 1或0
   */
  int insertWithDrawRecord(@Param("userId") String userId, @Param("count") float count);

  int insertWalletRecord(
      @Param("userId") String userId, @Param("count") float count, @Param("type") int type);

  /**
   * 获取用户的钱包流水记录条数，total,waitDeal
   *
   * @return 钱包流水记录条数，total,waitDeal
   */
  Map<String, Integer> selectWithdrawRecordCount();
  /**
   * 获取用户的钱包流水记录
   *
   * @param userId 用户编号
   * @param type 流水类型
   * @param start 开始索引
   * @param num 获取数量
   * @return 钱包流水记录列表
   */
  List<WalletRecord> selectWalletRecord(
      @Param("userId") String userId,
      @Param("type") int type,
      @Param("start") Integer start,
      @Param("num") Integer num);

  /**
   * 获取提现记录
   *
   * @param userId 用户编号,可空
   * @param deal 0 全部，1是已处理，-1是未处理
   * @param start 开始索引，可空
   * @param num 数量，与start同时null或非null
   * @return 提现记录
   */
  List<Map<String, Object>> selectWithdrawRecords(
      @Param("userId") String userId,
      @Param("deal") int deal,
      @Param("start") Integer start,
      @Param("num") Integer num);
  /**
   * 处理一个提现请求
   *
   * @param id 请求编号
   * @param resultImageURL 处理结果截图
   * @param adminName 管理员名
   * @return 1/0
   */
  int updateWithDrawResult(
      @Param("id") int id,
      @Param("resultImageURL") String resultImageURL,
      @Param("adminName") String adminName);

  /**
   * 根据编号选取一条提现记录，包括用户编号，提现金额，提现时间
   *
   * @param id 记录编号
   * @return 一条提现记录，包括用户编号，提现金额，提现时间
   */
  Map<String, Object> selectWithdrawRecord(@Param("id") int id);
}
